package com.systop.asset.controller;

import com.systop.asset.entity.Asset;
import com.systop.asset.entity.RestResponse;
import com.systop.asset.entity.Transfer;
import com.systop.asset.entity.vo.AssetVo;
import com.systop.asset.entity.vo.TransferVo;
import com.systop.asset.service.ITransferService;
import com.systop.asset.utils.BeanCopyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>ClassName : TransferController</p>
 * <p>Description : </p>
 *
 * @author 孙伟光
 * @version 1.0
 * @date 2025/7/2 15:25
 */
@RestController
@RequestMapping("/system/transfer")
public class TransferController {

    @Autowired
    private ITransferService  transferService;

    /**
     * 根据调拨ID获取调拨信息
     *
     * @param id 调拨记录的唯一标识符
     * @return 包含调拨信息的响应对象，若参数无效或记录不存在则返回错误响应
     */
    @GetMapping({"/{id}"})
    public RestResponse<TransferVo> getTransferById(@PathVariable("id") Long id){
        // 参数校验：检查传入的调拨ID是否为null
        if (id == null) {
            return RestResponse.failure(500, "调拨编号不能为空");
        }

        // 调用服务层方法，根据ID查询调拨信息
        TransferVo transferVo = transferService.getTransferById(id);

        // 检查查询结果是否为null，即调拨记录是否存在
        if (transferVo == null) {
            return RestResponse.failure(500, "调拨信息不存在");
        }

        // 查询成功，返回包含调拨信息的成功响应
        return RestResponse.success(transferVo);
    }

    /**
     * 获取调拨信息列表
     *
     * @param transfer 调拨查询条件对象，包含筛选条件参数
     * @return 包含调拨信息列表的响应对象，列表数据封装在RestResponse中
     */
    @GetMapping("/list")
    public RestResponse<List<TransferVo>> list(Transfer transfer) {
        // 调用服务层方法，根据查询条件获取调拨信息列表
        List<TransferVo> transferVoList = transferService.getTransferList(transfer);

        // 返回查询结果，封装为成功响应
        return RestResponse.success(transferVoList);
    }

    /**
     * 管理员后台添加调拨信息及其明细，并自动审批
     *
     * @param transferVo 调拨信息值对象，包含调拨主信息和明细列表
     * @return 操作结果响应，成功返回成功响应，失败返回包含错误信息的失败响应
     */
    @PostMapping
    public RestResponse  addTransferAndDetail(@RequestBody TransferVo transferVo){
        // 参数校验：检查调拨主信息是否为空
        if (transferVo == null) {
            return RestResponse.failure(500, "调拨信息不能为空");
        }
        // 参数校验：检查调拨明细列表是否为空
        if (transferVo.getTransferDetails() == null) {
            return RestResponse.failure(500, "调拨明细不能为空");
        }

        try {
            // 调用服务层方法添加调拨信息和明细
            Long transferId = transferService.addTransferAndDetail(transferVo);
            // 检查添加操作是否成功
            if (transferId == null) {
                return RestResponse.failure(500, "调拨信息添加失败");
            }

            // 将TransferVo转换为Transfer实体对象
            Transfer transfer = BeanCopyUtil.classVo(transferVo, Transfer.class);
            transfer.setId(transferId);
            transfer.setStatus(2L);
            // 调用服务层方法审批调拨信息
            int result1 = transferService.approveTransfer(transfer);
            // 检查审批操作是否成功（注意：这里原代码使用了result而不是result1，可能是错误）
            if (result1 == 0) {
                return RestResponse.failure(500, "调拨审批失败");
            }

            // 所有操作成功，返回成功响应
            return RestResponse.success();
        } catch (Exception e) {
            // 捕获并处理异常，返回包含异常信息的失败响应
            return RestResponse.failure(500, "调拨信息添加失败: " + e.getMessage());
        }
    }
}
